package cn.chengpengper.im.sdk.interfaces.sender;

import cn.chengpengper.im.common.domain.enums.IMTerminalType;
import cn.chengpengper.im.common.domain.model.ImGroupMessage;
import cn.chengpengper.im.common.domain.model.ImPrivateMessage;

import java.util.List;
import java.util.Map;

/*@formatter:off*/

/**
 * ____________________
 * < 神兽护体，永无bug! >
 * --------------------
 *
 * @author huchengpeng
 * @version v1.0.0
 * @date 2024/11/17 21:14
 * @description 消息发送接口
 */

/*@formatter:on*/


public interface ImSender {

    /**
     * 发送私聊消息
     *
     * @param message 私聊消息
     * @param <T>     泛型
     */
    <T> void sendPrivateMessage(ImPrivateMessage<T> message);

    /**
     * 发送群消息
     *
     * @param message 群消息
     * @param <T>     泛型
     */
    <T> void sendGroupMessage(ImGroupMessage<T> message);

    /**
     * 根据传入的用户ID列表获取在线用户与其终端的对应关系
     *
     * @param userIds 用户ID列表
     * @return 用户ID列表获取在线用户与其终端的对应关系
     */
    Map<Long, List<IMTerminalType>> getOnlineTerminal(List<Long> userIds);

    /**
     * 判断用户是否在线
     *
     * @param userId 用户ID
     * @return 是否在线
     */
    Boolean isOnline(Long userId);

    /**
     * 根据传入的用户ID列表筛选出在线的用户ID列表
     *
     * @param userIds 用户ID列表
     * @return 在线的用户ID列表
     */
    List<Long> getOnlineUser(List<Long> userIds);
}
